#include<algorithm>
#include<queue>
#include<iostream>
using namespace std;
struct node{
	int s,b;
	node(int s,int b):s(s),b(b){} 
	bool operator<(const node&a)const{
		return s>a.s;
	}//s小的优先 
};
int i,n;
void f(int a[]){
	for(i=0;i<n;++i)
		cin>>a[i];
	sort(a,a+n);
}
int main(){
	cin>>n;
	int a[n],b[n];
	f(a);f(b);//建2个排序好的数组。 
	priority_queue<node>q;
	for(i=0;i<n;++i)
		q.push(node(a[i]+b[0],0));//把a[i]+b[0]填入优先队列（共n个） 
	for(i=0;i<n;++i){
		node t=q.top();//输出并弹出最前边的（s最小的） 
		q.pop();
		cout<<t.s<<(i<n-1?" ":"");
		int x=t.b;//将当前求得s的方案的b数组的下标赋值给x 
		q.push(node(t.s-b[x]+b[x+1],x+1));//将s重新赋值为a+b[x+1] 
	}
	return 0;
}